home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / arch / blackfin / include / asm / io.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  6.6 KB  |  243 lines

  1. #ifndef _BFIN_IO_H
  2. #define _BFIN_IO_H
  3.  
  4. #ifdef __KERNEL__
  5.  
  6. #ifndef __ASSEMBLY__
  7. #include <linux/types.h>
  8. #endif
  9. #include <linux/compiler.h>
  10.  
  11. /*
  12.  * These are for ISA/PCI shared memory _only_ and should never be used
  13.  * on any other type of memory, including Zorro memory. They are meant to
  14.  * access the bus in the bus byte order which is little-endian!.
  15.  *
  16.  * readX/writeX() are used to access memory mapped devices. On some
  17.  * architectures the memory mapped IO stuff needs to be accessed
  18.  * differently. On the bfin architecture, we just read/write the
  19.  * memory location directly.
  20.  */
  21. #ifndef __ASSEMBLY__
  22.  
  23. static inline unsigned char readb(const volatile void __iomem *addr)
  24. {
  25.     unsigned int val;
  26.     int tmp;
  27.  
  28.     __asm__ __volatile__ ("cli %1;\n\t"
  29.             "NOP; NOP; SSYNC;\n\t"
  30.             "%0 = b [%2] (z);\n\t"
  31.             "sti %1;\n\t"
  32.             : "=d"(val), "=d"(tmp): "a"(addr)
  33.             );
  34.  
  35.     return (unsigned char) val;
  36. }
  37.  
  38. static inline unsigned short readw(const volatile void __iomem *addr)
  39. {
  40.     unsigned int val;
  41.     int tmp;
  42.  
  43.     __asm__ __volatile__ ("cli %1;\n\t"
  44.             "NOP; NOP; SSYNC;\n\t"
  45.             "%0 = w [%2] (z);\n\t"
  46.             "sti %1;\n\t"
  47.                   : "=d"(val), "=d"(tmp): "a"(addr)
  48.             );
  49.  
  50.     return (unsigned short) val;
  51. }
  52.  
  53. static inline unsigned int readl(const volatile void __iomem *addr)
  54. {
  55.     unsigned int val;
  56.     int tmp;
  57.  
  58.     __asm__ __volatile__ ("cli %1;\n\t"
  59.             "NOP; NOP; SSYNC;\n\t"
  60.             "%0 = [%2];\n\t"
  61.             "sti %1;\n\t"
  62.                   : "=d"(val), "=d"(tmp): "a"(addr)
  63.             );
  64.     return val;
  65. }
  66.  
  67. #endif /*  __ASSEMBLY__ */
  68.  
  69. #define writeb(b,addr) (void)((*(volatile unsigned char *) (addr)) = (b))
  70. #define writew(b,addr) (void)((*(volatile unsigned short *) (addr)) = (b))
  71. #define writel(b,addr) (void)((*(volatile unsigned int *) (addr)) = (b))
  72.  
  73. #define __raw_readb readb
  74. #define __raw_readw readw
  75. #define __raw_readl readl
  76. #define __raw_writeb writeb
  77. #define __raw_writew writew
  78. #define __raw_writel writel
  79. #define memset_io(a,b,c)    memset((void *)(a),(b),(c))
  80. #define memcpy_fromio(a,b,c)    memcpy((a),(void *)(b),(c))
  81. #define memcpy_toio(a,b,c)    memcpy((void *)(a),(b),(c))
  82.  
  83. #define inb(addr)    readb(addr)
  84. #define inw(addr)    readw(addr)
  85. #define inl(addr)    readl(addr)
  86. #define outb(x,addr) ((void) writeb(x,addr))
  87. #define outw(x,addr) ((void) writew(x,addr))
  88. #define outl(x,addr) ((void) writel(x,addr))
  89.  
  90. #define inb_p(addr)    inb(addr)
  91. #define inw_p(addr)    inw(addr)
  92. #define inl_p(addr)    inl(addr)
  93. #define outb_p(x,addr) outb(x,addr)
  94. #define outw_p(x,addr) outw(x,addr)
  95. #define outl_p(x,addr) outl(x,addr)
  96.  
  97. #define ioread8_rep(a,d,c)    insb(a,d,c)
  98. #define ioread16_rep(a,d,c)    insw(a,d,c)
  99. #define ioread32_rep(a,d,c)    insl(a,d,c)
  100. #define iowrite8_rep(a,s,c)    outsb(a,s,c)
  101. #define iowrite16_rep(a,s,c)    outsw(a,s,c)
  102. #define iowrite32_rep(a,s,c)    outsl(a,s,c)
  103.  
  104. #define ioread8(X)            readb(X)
  105. #define ioread16(X)            readw(X)
  106. #define ioread32(X)            readl(X)
  107. #define iowrite8(val,X)            writeb(val,X)
  108. #define iowrite16(val,X)        writew(val,X)
  109. #define iowrite32(val,X)        writel(val,X)
  110.  
  111. #define IO_SPACE_LIMIT 0xffffffff
  112.  
  113. /* Values for nocacheflag and cmode */
  114. #define IOMAP_NOCACHE_SER        1
  115.  
  116. #ifndef __ASSEMBLY__
  117.  
  118. extern void outsb(unsigned long port, const void *addr, unsigned long count);
  119. extern void outsw(unsigned long port, const void *addr, unsigned long count);
  120. extern void outsw_8(unsigned long port, const void *addr, unsigned long count);
  121. extern void outsl(unsigned long port, const void *addr, unsigned long count);
  122.  
  123. extern void insb(unsigned long port, void *addr, unsigned long count);
  124. extern void insw(unsigned long port, void *addr, unsigned long count);
  125. extern void insw_8(unsigned long port, void *addr, unsigned long count);
  126. extern void insl(unsigned long port, void *addr, unsigned long count);
  127. extern void insl_16(unsigned long port, void *addr, unsigned long count);
  128.  
  129. extern void dma_outsb(unsigned long port, const void *addr, unsigned short count);
  130. extern void dma_outsw(unsigned long port, const void *addr, unsigned short count);
  131. extern void dma_outsl(unsigned long port, const void *addr, unsigned short count);
  132.  
  133. extern void dma_insb(unsigned long port, void *addr, unsigned short count);
  134. extern void dma_insw(unsigned long port, void *addr, unsigned short count);
  135. extern void dma_insl(unsigned long port, void *addr, unsigned short count);
  136.  
  137. static inline void readsl(const void __iomem *addr, void *buf, int len)
  138. {
  139.     insl((unsigned long)addr, buf, len);
  140. }
  141.  
  142. static inline void readsw(const void __iomem *addr, void *buf, int len)
  143. {
  144.     insw((unsigned long)addr, buf, len);
  145. }
  146.  
  147. static inline void readsb(const void __iomem *addr, void *buf, int len)
  148. {
  149.     insb((unsigned long)addr, buf, len);
  150. }
  151.  
  152. static inline void writesl(const void __iomem *addr, const void *buf, int len)
  153. {
  154.     outsl((unsigned long)addr, buf, len);
  155. }
  156.  
  157. static inline void writesw(const void __iomem *addr, const void *buf, int len)
  158. {
  159.     outsw((unsigned long)addr, buf, len);
  160. }
  161.  
  162. static inline void writesb(const void __iomem *addr, const void *buf, int len)
  163. {
  164.     outsb((unsigned long)addr, buf, len);
  165. }
  166.  
  167. /*
  168.  * Map some physical address range into the kernel address space.
  169.  */
  170. static inline void __iomem *__ioremap(unsigned long physaddr, unsigned long size,
  171.                 int cacheflag)
  172. {
  173.     return (void __iomem *)physaddr;
  174. }
  175.  
  176. /*
  177.  * Unmap a ioremap()ed region again
  178.  */
  179. static inline void iounmap(void *addr)
  180. {
  181. }
  182.  
  183. /*
  184.  * __iounmap unmaps nearly everything, so be careful
  185.  * it doesn't free currently pointer/page tables anymore but it
  186.  * wans't used anyway and might be added later.
  187.  */
  188. static inline void __iounmap(void *addr, unsigned long size)
  189. {
  190. }
  191.  
  192. /*
  193.  * Set new cache mode for some kernel address space.
  194.  * The caller must push data for that range itself, if such data may already
  195.  * be in the cache.
  196.  */
  197. static inline void kernel_set_cachemode(void *addr, unsigned long size,
  198.                     int cmode)
  199. {
  200. }
  201.  
  202. static inline void __iomem *ioremap(unsigned long physaddr, unsigned long size)
  203. {
  204.     return __ioremap(physaddr, size, IOMAP_NOCACHE_SER);
  205. }
  206. static inline void __iomem *ioremap_nocache(unsigned long physaddr,
  207.                         unsigned long size)
  208. {
  209.     return __ioremap(physaddr, size, IOMAP_NOCACHE_SER);
  210. }
  211.  
  212. extern void blkfin_inv_cache_all(void);
  213.  
  214. #endif
  215.  
  216. #define    ioport_map(port, nr)        ((void __iomem*)(port))
  217. #define    ioport_unmap(addr)
  218.  
  219. /* Pages to physical address... */
  220. #define page_to_phys(page)      ((page - mem_map) << PAGE_SHIFT)
  221. #define page_to_bus(page)       ((page - mem_map) << PAGE_SHIFT)
  222.  
  223. #define phys_to_virt(vaddr)    ((void *) (vaddr))
  224. #define virt_to_phys(vaddr)    ((unsigned long) (vaddr))
  225.  
  226. #define virt_to_bus virt_to_phys
  227. #define bus_to_virt phys_to_virt
  228.  
  229. /*
  230.  * Convert a physical pointer to a virtual kernel pointer for /dev/mem
  231.  * access
  232.  */
  233. #define xlate_dev_mem_ptr(p)    __va(p)
  234.  
  235. /*
  236.  * Convert a virtual cached pointer to an uncached pointer
  237.  */
  238. #define xlate_dev_kmem_ptr(p)    p
  239.  
  240. #endif                /* __KERNEL__ */
  241.  
  242. #endif                /* _BFIN_IO_H */
  243.